This parameterized OOTF maps from ACES (linear scene) RGB to linear display RGB
(both of these are optical in nature).
This transform bypasses non-linear signal display RGB (which is electrical in nature).
general.OOTF( display_pri, Ymin=0.00010, Ymid=7.2, Ymax=108,
observerWP=NULL, limiting_pri=NULL,
surround='dark', dynrange='SDR', glowmod='1.1', redmod='1.1' )
general.OOTF()
returns a TransferFunction
of dimension 3
that maps ACES RGB to linear display RGB.
The domain of the returned TransferFunction
depends on the values of
Ymin
, Ymid
, and Ymax
.
The range is [0,1]\(^3\), for which clamping may be used.
The metadata
contains the display primaries and whitepoint,
which is useful in installRGB()
.
a 4x2 matrix containing the display primaries, or a numeric vector of length 8
that can be converted to such a matrix, by row.
Some built-in matrices are REC709_PRI
, etc.
This argument cannot be NULL
.
the minimum display luminance, in \(cd/m^2\), or nit.
the middle display luminance, in \(cd/m^2\), or nit.
the maximum display luminance, in \(cd/m^2\), or nit.
the xy chromaticity of the assumed observer whitepoint.
This is used to make a Chromatic Adaptation Transform (CAT) from the ACES whitepoint (approximately D60)
to the assumed observer whitepoint.
If observerWP
is NULL
, it is taken from display_pri
.
If ACES and observer whitepoints are the same, there is no CAT.
a 4x2 matrix containing the limiting primaries, or a numeric vector of length 8
that can be converted to such a matrix, by row.
If limiting_pri
is not NULL
, and not equal to display_pri
,
then the output RGB is clamped to the RGB cube that corresponds to limiting_pri
.
The level of the surround luminance.
Valid values are 'dark'
and 'dim'
.
If the level is 'dark'
there is no special color compensation.
Partial matching is enabled and matching is case-insensitive.
the dynamic range of the display system.
Valid values are 'SDR'
(standard dynamic range) and 'HDR'
(high dynamic range).
If the value is 'HDR'
then surround
is ignored.
Matching is partial and case-insensitive.
the version of the Glow Modifier to use.
The only version currently supported is "1.1"
.
glowmod
can also be NULL
, NA
, or FALSE
,
which means to use no Glow Modifier at all.
the version of the Red Modifier to use.
The only version currently supported is "1.1"
.
This string can also be "1.1+pinv"
which means to use a precision inverse; the forward transfer is exactly the same.
This precision inverse uses an iterative root-finder,
and is slower than the approximate default inverse.
redmod
can also be NULL
, NA
, or FALSE
,
which means to use no Red Modifier at all.
The transfer is complicated; here is a summary of the steps:
glow module (see argument glowmod
)
red modifier (see argument redmod
)
matrix conversion from AP0 RGB → AP1 RGB
clamp to non-negative RGB
global desaturation (as in RRT.TF
)
single-stage tone-scale (SSTS) using Ymin
, Ymid
, and Ymax
absolute luminance to linear code-value, in cube [0,1]\(^3\)
matrix conversion from AP1 RGB to XYZ
dim surround compensation (optional, see arguments surround
and dynrange
)
clamp XYZ to limiting primaries (optional, see argument limiting_pri
)
adapt XYZ from ACES whitepoint to observer whitepoint (optional, see argument observerWP
)
matrix conversion from XYZ to linear display RGB (see argument display_pri
)
scale and roll-white to avoid clipping (optional, only when observerWP
is ACES whitepoint and display whitepoint is D65 or DCI whitepoint)
clamp to non-negative RGB
ST 2065-1:2012. SMPTE Standard - Academy Color Encoding Specification (ACES). 2013.
TransferFunction
,
installRGB()
,
metadata()
,
Standard Primaries